<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Parallel Virtual Machine</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Parallel_Virtual_Machine"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Parallel_Virtual_Machine rootpage-Parallel_Virtual_Machine skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span lang="en">Parallel Virtual Machine</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<p class="mw-empty-elt">
</p>
<div class="infobox_v3 infobox infobox--frwiki noarchive" style="width:260px">
<div class="entete icon informatique" style="color: #000000;"><style data-mw-deduplicate="TemplateStyles:r228712691">
/* start https://fr.wikipedia.org/ */
.mw-parser-output .entete.informatique{background-image:url("./_mw_/Picto.nfo.png")}
/* end https://fr.wikipedia.org/ */
</style>
<div>Parallel Virtual Machine</div>
</div>
<p class="mw-empty-elt">
</p>
<table><caption style="color:#000000;">Informations</caption>
<tbody><tr>
<th scope="row"><a href="D%C3%A9veloppeur" title="Développeur">Développé par</a></th>
<td>
<span class="wd_p178"><a href="Universit%C3%A9_du_Tennessee" title="Université du Tennessee">Université du Tennessee</a></span></td>
</tr>
<tr>
<th scope="row"> <a href="Version_d'un_logiciel" title="Version d'un logiciel">Première version</a>
</th>
<td>
<span class="wd_p571"><time>1989</time></span></td>
</tr>
<tr>
<th scope="row"> <a href="Langage_de_programmation" title="Langage de programmation">Écrit en</a>
</th>
<td>
<span class="wd_p277"><a href="C_(langage)" title="C (langage)">C</a></span></td>
</tr>
<tr>
<th scope="row"><a href="Licence_de_logiciel" title="Licence de logiciel">Licence</a></th>
<td>
<span class="wd_p275"><a href="Licence_BSD" title="Licence BSD">Licence BSD</a></span></td>
</tr>
<tr>
<th scope="row"><a href="Site_web" title="Site web">Site web</a></th>
<td>
<span class="wd_p856"><a rel="nofollow" class="external text" href="http://www.csm.ornl.gov/pvm/pvm_home.html">www.csm.ornl.gov/pvm/pvm_home.html</a></span></td>
</tr>
</tbody></table>
<p class="mw-empty-elt">
</p>
</div>
<p><b><span class="lang-en" lang="en">Parallel Virtual Machine</span></b> (<b>PVM</b>) est un ensemble de <a href="Biblioth%C3%A8que_logicielle" title="Bibliothèque logicielle">bibliothèques logicielles</a> et <a href="Outil" title="Outil">outils</a> <a href="Logiciel_libre" title="Logiciel libre">libres</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> de communication (langages <a href="C_(langage)" title="C (langage)">C</a> et <a href="Fortran" title="Fortran">Fortran</a>) pour machines parallèles et <a href="R%C3%A9seau_informatique" title="Réseau informatique">réseau d'ordinateurs</a> (locaux ou distants, éventuellement hétérogènes).
Il permet d’agréger un réseau d'ordinateurs en un seul ordinateur virtuel permettant ainsi d'augmenter la concurrence des calculs, d'où l'appellation de (<a href="Machine_virtuelle_(informatique)" class="mw-redirect" title="Machine virtuelle (informatique)">machine virtuelle parallèle</a>).
Il a été développé au <a href="Laboratoire_national_d'Oak_Ridge" title="Laboratoire national d'Oak Ridge">Laboratoire national d'Oak Ridge</a> en 1989 et a servi de base à un projet plus vaste commun à trois universités des États-Unis<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Introduction">Introduction</h2></div>
<p>PVM est une bibliothèque portable de <a href="Passage_de_messages" title="Passage de messages">passage de messages</a> permettant d'utiliser un réseau de machines hétéroclites (<a href="Ordinateur_portable" title="Ordinateur portable">ordinateur portable</a>, <a href="Ordinateur_personnel" title="Ordinateur personnel">PC</a>, <a href="Serveur_informatique" title="Serveur informatique">serveur</a>, <a href="Superordinateur" title="Superordinateur">superordinateur</a>) en formant une machine virtuelle unique.
</p><p>Le but général de PVM est de proposer une solution simple et hautement productive pour développer des applications fortement partagées.
</p><p>PVM gère tout le routage de messages, la conversion de données et la répartition des tâches au sein d'un réseau d'architectures distinctes et normalement incompatibles.
</p><p>L'interface de programmation est très simple :
</p>
<ul><li>l'utilisateur écrit une application comme une collection de tâches coopératives ;</li>
<li>les tâches accèdent aux ressources PVM à travers une bibliothèque de routines standards ;</li>
<li>ces routines permettent l'initialisation et l'exécution des tâches à travers le réseau ainsi que les communications et les synchronisations entre les différentes tâches.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Le_démon_PVM_(pvmd)"><span id="Le_d.C3.A9mon_PVM_.28pvmd.29"></span>Le démon PVM (pvmd)</h2></div>
<p>Un <a href="Daemon_(informatique)" title="Daemon (informatique)">démon</a> PVM est lancé sur chaque machine pour former une machine virtuelle globale. Un pvmd possède un propriétaire qui est le seul à pouvoir utiliser les ressources de la machine, pour des raisons de sécurité.
</p><p>Le démon PVM fournit plusieurs fonctionnalités :
</p>
<ul><li>authentification ;</li>
<li>routage et contrôle des messages ;</li>
<li>contrôle de processus ;</li>
<li>détection des erreurs.</li></ul>
<p>Il vérifie également si les autres démons de la machine virtuelle sont toujours en activité.
</p><p>Même si l'application crashe, le démon continue de fonctionner afin d'assister le débogage.
</p><p>Au démarrage, le démon se configure comme maître ou esclave selon les arguments.
Il crée une grille de connexion pour communiquer avec les tâches et les autres démons, et ouvre un journal d'erreurs.
</p><p>Un démon maître lit le fichier hôte s'il existe alors que le démon esclave reçoit les paramètres du maître
(ce fichier est un .pvmrc dont chaque ligne est : add <nom_du_client> )
</p><p>Après configuration, le démon lance une boucle qui examine toutes les sources d'entrée et place les paquets dans une file d'attente.
Ces paquets sont ensuite réassemblés et injectés dans le point d'entrée.
</p><p>Le démon est stoppé quand il est supprimé de la machine virtuelle ou quand il reçoit un message d’arrêt.
</p><p>Quand le démon s'arrête, il effectue deux actions finales :
</p>
<ul><li>il arrête les tâches sous son contrôle (avec un <a href="SIGTERM" title="SIGTERM">SIGTERM</a>) ;</li>
<li>il envoie un message à tous les autres démons dans sa table des hôtes.</li></ul>
<p>Le nombre de tâches qu'un démon peut gérer est limité par deux facteurs :
</p>
<ol><li>Le nombre de processus que le système d'exploitation autorise à un utilisateur ;</li>
<li>Le nombre de <a href="Descripteur_de_fichier" title="Descripteur de fichier">descripteurs de fichier</a> disponibles (dépend du <a href="Syst%C3%A8me_d'exploitation" title="Système d'exploitation">système d'exploitation</a>).</li></ol>
<div class="mw-heading mw-heading2"><h2 id="L'interprète_PVM_(pvm)"><span id="L.27interpr.C3.A8te_PVM_.28pvm.29"></span>L'interprète PVM (pvm)</h2></div>
<p>Il y a un interprète, qui se lance avec la commande pvm, et qui permet d'agir sur le démon (pvmd) grâce à diverses commandes :
</p>
<ul><li>conf liste l'ensemble des machines disponibles ;</li>
<li>add permet de rajouter un client ;</li>
<li>del permet de supprimer un client ;</li>
<li>halt sort de l'interprète et tue le démon.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="La_bibliothèque_PVM"><span id="La_biblioth.C3.A8que_PVM"></span>La bibliothèque PVM</h2></div>
<p>La bibliothèque permet à une tâche de communiquer avec le démon et les autres tâches.
Elle contient des fonctions pour assembler et désassembler les messages, et d'autres fonctions pour effectuer les <a href="Appel_syst%C3%A8me" title="Appel système">appels systèmes</a>.
</p><p>la bibliothèque est construite en deux niveaux :
</p>
<ul><li>haut niveau générique pour toutes les machines incluant la plupart des fonctions de l'interface ;</li>
<li>bas niveau spécifique à un environnement pouvant être remplacé.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Protocoles_utilisés_par_PVM"><span id="Protocoles_utilis.C3.A9s_par_PVM"></span>Protocoles utilisés par PVM</h2></div>
<p>Les démons communiquent entre eux par <a href="User_Datagram_Protocol" title="User Datagram Protocol">UDP</a> en utilisant un mécanisme de vérification et de récupération. <a href="Transmission_Control_Protocol" title="Transmission Control Protocol">TCP</a> n'est pas utilisé dans ce cas car il consomme un FileDescriptor pour chaque connexion (nombre limité par le système) et ne permet pas de <a href="Tol%C3%A9rance_aux_pannes" title="Tolérance aux pannes">tolérance aux pannes</a> si un démon a crashé. TCP serait également trop gourmand niveau ressource car chaque démon devrait avoir N-1 sockets, ce qui représenterait N*(N-1) sockets pour le système global.
</p><p>Les tâches communiquent entre elles par le protocole TCP afin d'assurer la cohérence des données.
</p>
<div class="mw-heading mw-heading2"><h2 id="Architectures_supportées"><span id="Architectures_support.C3.A9es"></span>Architectures supportées</h2></div>
<table class="wikitable" style="text-align:center; width:80%;">
<caption>Architectures supportées<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</caption>
<tbody><tr>
<th scope="col">Architecture
</th>
<th scope="col">Système
</th></tr>
<tr>
<td>Pentium II, Pentium Pro, Pentium, Duals and Quads
</td>
<td>Win95, NT 3.5.1, NT 4.0
<p>Linux, Solaris, SCO, NetBSD, BSDI, FreeBSD
</p>
</td></tr>
<tr>
<td>MAC
</td>
<td>NetBSD
</td></tr>
<tr>
<td>Amiga
</td>
<td>NetBSD
</td></tr>
<tr>
<td>SUN3, SUN4, SPARC, UltraSPARC
</td>
<td>SunOS, Solaris 2.x
</td></tr>
<tr>
<td>IBM RS6000, J30
</td>
<td>AIX 3.x, AIX 4.x
</td></tr>
<tr>
<td>HP 9000
</td>
<td>HPux
</td></tr>
<tr>
<td>DEC Alpha, Pmax, microvax
</td>
<td>OSF, NT-Alpha
</td></tr>
<tr>
<td>SGI
</td>
<td>IRIS 5.x, IRIS 6.x
</td></tr>
<tr>
<td>Cray YMP, T3D, T3E, Cray2
</td>
<td>
</td></tr>
<tr>
<td>Convex Exemplar
</td>
<td>
</td></tr>
<tr>
<td>IBM SP2, 3090
</td>
<td>
</td></tr>
<tr>
<td>NEC SX-3
</td>
<td>
</td></tr>
<tr>
<td>Fujitsu
</td>
<td>
</td></tr>
<tr>
<td>Amdahl
</td>
<td>
</td></tr>
<tr>
<td>TMC CM5
</td>
<td>
</td></tr>
<tr>
<td><a href="Intel_Paragon" title="Intel Paragon">Intel Paragon</a>
</td>
<td>
</td></tr>
<tr>
<td>Sequent Symmetry, Balance
</td>
<td>
</td></tr></tbody></table>
<p><br>
</p>
<div class="mw-heading mw-heading2"><h2 id="Références"><span id="R.C3.A9f.C3.A9rences"></span>Références</h2></div>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text"><a rel="nofollow" class="external text" href="http://packages.debian.org/changelogs/pool/main/p/pvm/pvm_3.4.5-12.5/pvm.copyright">pvm.copyright</a></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a> </span><span class="reference-text"><span class="ouvrage">« <a rel="nofollow" class="external text" href="http://1995.jres.org/actes/appli4/1/requile.html"><cite style="font-style:normal;">PVM "Parallel Virtual Machine"</cite></a> », sur <span class="italique">jres.org</span> <small style="line-height:1em;">(consulté le <time class="nowrap" datetime="2023-05-27" data-sort-value="2023-05-27">27 mai 2023</time>)</small></span>.</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a> </span><span class="reference-text"><span class="ouvrage">« <a rel="nofollow" class="external text" href="http://www.csm.ornl.gov/pvm/pvmArch.html"><cite style="font-style:normal;">PVM Supported Architectures/OSs</cite></a> », sur <span class="italique">csm.ornl.gov</span> <small style="line-height:1em;">(consulté le <time class="nowrap" datetime="2023-05-27" data-sort-value="2023-05-27">27 mai 2023</time>)</small></span>.</span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="Liens_externes">Liens externes</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.csm.ornl.gov/pvm/pvm_home.html">PVM</a></li>
<li><a rel="nofollow" class="external text" href="http://veron.univ-tln.fr/ENSEIGNEMENT/L2/pvm/node9.html">Exemple de programme avec PVM</a></li></ul>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-02-09" href="https://fr.wikipedia.org/wiki/?title=Parallel_Virtual_Machine&oldid=222867018">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>